package top.someapp.applib;

import android.app.Activity;
import android.app.Application;
import androidx.annotation.NonNull;

/**
 * 应用上下文接口
 *
 * @author zwz
 * Created on 2020-03-30
 */
public interface AppContext {

    /**
     * 获取Application对象
     *
     * @return Application对象
     */
    <T extends Application> T getApplication();

    /**
     * 是否以调试模式运行的
     *
     * @return true：以调试模式运行的；false：以非调试模式运行的
     */
    boolean isDebugMode();

    /**
     * @return 标示此app的代码
     */
    String getAppCode();

    /**
     * @return 文本形式的版本信息，形如：MAJOR.MINOR.PATCH, 如：1.2.3
     */
    String getVersionName();

    /**
     * @return 数字形式的版本信息，方便比较两个版本的新旧，如12030
     */
    int getVersionCode();

    /**
     * 获取当前Activity对象
     *
     * @return 当前Activity对象
     */
    Activity currentActivity();

    /**
     * 设置当前Activity对象
     *
     * @param activity Activity对象
     */
    void setCurrentActivity(@NonNull Activity activity);

    /**
     * 是否拥有permission权限
     *
     * @param permission 权限名称
     * @return true：拥有该权限；false：没有该权限
     */
    boolean hasPermission(@NonNull String permission);

    /**
     * 请求获取permissions权限
     *
     * @param permissions 权限列表
     * @param requestCode 供回调使用的标示值(flag)
     */
    void requestPermission(@NonNull String[] permissions, @CodeDefine int requestCode);

    /**
     * 权限申请结果回调
     *
     * @param permission 申请的权限
     * @param granted 是否获得了该权限
     */
    void onPermissionResult(@NonNull String permission, boolean granted);
}
